iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 13
0
Software Development

學習Go系列 第 13

Go day 13 (methods)

  • 分享至 

  • xImage
  •  

method

在 Go 裡 method 是與特定型別關聯的 function.宣告方式就是在 function 名稱之前再加上一個額外的參數.
而 function 就會附在該參數的型別上.

func (m MyMath) add(x int, y int) int {
	return x + y
}

拿之前的範例來看,第 1 個 add 是 function 而第 2 個 add 算是 MyMath 的 method,與 struct MyMath 綁定關聯,所以 MyMath 可以用該方法.

package main

import (
	"fmt"
)

type MyMath struct{}

func main() {
	fmt.Println(add(1, 2)) // 3
	var myMath = new(MyMath)
	fmt.Println(myMath.add(4, 5)) // 9
}
func add(x int, y int) int {
	return x + y
}

func (m MyMath) add(x int, y int) int {
	return x + y
}

使用 pointer 的方式

func (m *MyMath) add(x int, y int) int {
	return x + y
}

呼叫方式

newMath := &MyMath{}
fmt.Println(newMath.add(1, 2)) // 3

記得要加括號 (&newMath).add 不然會被當成 &(newMath.add) 會出錯.

newMath := MyMath{}
fmt.Println(newMath.add(1, 2))    // 3
fmt.Println((&newMath).add(3, 5)) // 8

可以透過 method 方式,取得或改變 struct 封裝起來的變數

package main

import (
	"fmt"
)

type Counter struct {
	sum int
}

func (c *Counter) add() {
	c.sum++
}
func (c *Counter) getSum() int {
	return c.sum
}

func main() {
	var ct Counter
	ct.add()
	ct.add()
	fmt.Println(ct.getSum()) // 2
}


上一篇
Go day 12 (function)
下一篇
Go day 14 (interface)
系列文
學習Go30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言